<!-- Start Document Outline -->

* [Fedora: управление пакетами. Репозитории](#fedora-управление-пакетами-репозитории)
	* [Что такое репозиторий](#что-такое-репозиторий)
	* [Физическая структура репозиториев](#физическая-структура-репозиториев)
		* [Структура главного репозитория](#структура-главного-репозитория)
		* [Структура репозитория RPMFusion](#структура-репозитория-rpmfusion)
		* [Структура репозитория RFRemix](#структура-репозитория-rfremix)
		* [Дополнительные репозитории](#дополнительные-репозитории)
	* [Логическая организация репозиториев](#логическая-организация-репозиториев)
		* [Классификация программ](#классификация-программ)
		* [Основные репозитории](#основные-репозитории)

<!-- End Document Outline -->

# [Fedora: управление пакетами. Репозитории](https://www.alv.me/fedora-upravlenie-paketami-Repozitorii/)

Алексей Федорчук

## Что такое репозиторий

Утилита rpm предназначена в первую очередь для установки индивидуальных пакетов из любых источников — локальных или сетевых (например, с сайтов разработчиков), но преимущественно первых. Система же управления пакетами yum ориентирована на доступ к репозиториям пакетов, причём главным образом сетевым. Хотя и использование её с репозиториями локальными также не возбраняется.

Что такое репозиторий
Прежде всего, попробуем ответить на вопрос, что такое репозиторий. Ибо наличие оного нынче — один из главных дистро-определяющих признаков.

В переводе на русский язык слово репозиторий означает хранилище — и именно его рекомендуют употреблять языковые пуристы (они же те, кто предпочитает называть себя grammar nazi). Однако, как это обычно бывает по жизни, в народе утвердилось иное их именование — repo или, говоря по нашему, по бразильскому кириллическому, репы. Почему во множественном числе — станет понятно из дальнейшего рассказа. Ну а как синоним я предпочитаю термин хренилищще.

Сам по себе репозиторий действительно можно в первом приближении определить как место хранения пакетов, специально собранных для данного дистрибутива, к которому возможен свободный (мы ведь ведём речь только о свободных системах) доступ.

Однако доступности сервера, хранящего пакеты, недостаточно, чтобы носить звание репозитория. Пакеты в репозитории должны быть структурированы по определённым, присущим данному дистрибутиву, принципам. Система их хранения должна обеспечивать их пополнение, обновление, а главное — поддержку целостности и непротиворечивости пакетов в отношении зависимостей, причём для всех поддерживаемых на текущий момент версий дистрибутива.

Иными словами, пакеты в репозитории должны сопровождаться базами данных — теми самыми, которые используются системой управления пакетами данного дистрибутива, а также — его системой построения пакетов.

Кроме того, весьма желательно, чтобы репозиторий зеркалировался на нескольких независимых серверах — по вполне понятным причинам. Правда, это не является непременным требованием. Тем не менее, наличие зеркал — одно из оснований для употребления слова репозиторий во множественном числе.

А теперь посмотрим, как все эти общие соображения выглядят на практике — применительно к репозиториям Fedora.	

## Физическая структура репозиториев
Физически репозитории Fedora — это набор вложенных подкаталогов на ftp- или http-серверах, и имеют они подчас довольно сложную и не вполне прозрачную структуру. Знание её для пользователя не обязательно — но в ряде нештатных ситуаций будет не лишним. А поскольку структура эта нигде не описана, по крайней мере, на русском языке, — уделим ей толику внимания.

Впрочем, нетерпеливые читатели могут сразу перейти к следующему разделу — о логическом устройстве репозиториев. А к настоящему образаться только при возникновении необходимости.

### Структура главного репозитория
Головное, если так можно выразиться, хренилище пакетов, как нетрудно догадаться, находится по <a href="http://fedoraproject.org/" target="_blank">адресу</a>  и далее вглубь. Однако практически пользователь туда почти никогда не попадает: как мы увидим в разделе об управлении пакетами, система эта автоматически посылает его…

нет, не туда, куда вы подумали в меру своей испорченности, а на наиболее быстрое зеркало. Причём именно наиболее быстрое физически и именно в данный момент — потому что это проверяется не по зональной принадлежности и прочим формальным признакам, а по отклику на всамделишний запрос. Если, конечно, установлен соответствующий плагин к yum‘у — но об этом мы поговорим несколько позднее.

Так что, набрав в строке браузера что-нибудь типа http://download.fedoraproejct.org, наш советский пользователь окажется на сервере с URL типа 
http://mirror.имя_рек.ru/fedora/linux/ (а возможно, что даже и не ru вовсе). Имя этого самого имя река я изрекать не буду — полный список возможных вариантов можно увидеть здесь http://mirrors.fedoraproject.org/publiclist. И отдать предпочтение какому-то одному из них — значит, как сказал бы Шурик, проявить несправедливость к другому имя реку.

Естественно, что структура всех имя реков идентична, так что её можно рассматривать на примере любого зеркала.

Итак, оказавшись на имя_рек/fedora/linux/, мы видим следующие каталоги:

    development/
    releases/
    updates/
Как нетрудно догадаться, в каталоге development помещаются пакеты, находящиеся в состоянии разработки (здесь важен подкаталог /development/rawhide/, к которому мы со временем вернёмся), в каталоге updates — недавно обновлённые. А вот каталог releases — это именно то, что нас в данный момент интересует.

Пробираясь далее сквозь дебри иерархии, мы видим список подкаталогов, соответствующих ныне поддерживаемым версиям, на текущий момент это

    12
    13
    14
и подкаталог test. Иногда он пуст, содержимое в нём появляется, когда от разрабатываемой ветки (той самой rawhide) отщепляется альфа-версия следующего релиза.

Продолжим карабканье по иерархическому древу. В релизном его отростке мы видим следующие подкаталоги:

    Everything
    Fedora
    Live
Первый включает в себя пакеты различных версий и сборок, произведённых за время существования релиза. Первый, как следует из названия, содержит текущие обновления сборок пакетов, а последний — образы LiveCD для обеих поддерживаемых архитектур (i686 и x86_64). И о том, и о другом будет говориться своевременно. А вот по каталогу Fedora будем карабкаться дальше — тем более, что его можно рассматривать как пример устройства любого каталога на серверах проекта.

Итак, в каталоге     

    fedora/linux/releases/14/Fedora/
можно видеть такие подкаталоги:

    i386
    source
    x86_64
Второй из них включает в себя rpm-пакеты исходных текстов (так называемые *.src.rpm), о которых также речь пойдёт отдельная. Первый же и третий содержат сборки для 32- и 64-битных архитектур, соответственно. Очевидно, что внутри они абсолютно одинаковы, поэтому их внутренности рассмотрим на примере более актуальной ныне архитектуры x86_64.

    iso
    jigdo
    os
В первом лежат образы установочных дисков — DVD, набора CD и диска для сетевой установки (netinst), о которых речь будет в разделе про установку системы. Второй содержит файлы метаданных для jigdo (Jigsaw Download) — системы распространения больших файлов (в данном случае — образов тех же установочных дисков) и служит той же цели, что и предыдущий. Ну а в третьем, в подкаталоге Packages, собственно, и находятся искомые пакеты.

Кроме этого, в каталоге

    fedora/linux/releases/14/Fedora/x86_64/os/
     

можно видеть служебные файлы, такие, как GPG-ключи для проверки подлинности, файлы описания репозитория (в подкаталогах repodata и repoview), файлы для компоновки собственных образов загрузочных дисков (в подкаталогах images и isolinux), которые в данный момент нас не интересуют.

Что же касается содержимого каталога Packages, то оно представлено rpm-пакетами — теми, которые непосредственно поддерживаются в рамках проекта Fedora.

### Структура репозитория RPMFusion
Головным репозиторием, однако, список доступных для нашего дистрибутива пакетов не исчерпывается. Существует также репозиторий для дополнительных пакетов, поддерживаемых волонтёрами в рамках самостоятельного проекта — <a href="http://rpmfusion.org/" target="_blank">RPMFusion</a>.

Собственно репозиторий дополнительных пакетов находится <a href="http://download1.rpmfusion.org/" target="_blank">здесь</a>. В нём мы видим два каталога — free и nonfree. Первый предназначен для безусловно свободных программ (в головном репозитории Fedora, кстати, только такие и имеются), второй — для программ, на распространение которых накладываются некоторые ограничения. Какие именно — к этому вопросу мы ещё вернёмся.

Внутренняя структура обоих каталогов одинакова. В них имеются подкаталоги el и fedora. Первый включает пакеты, обратно перенесённые (backports) из RHEL и нас сейчас не интересует. Второй же включает подкаталоги:

    development/
    releases/
    updates/
а также файлы описания репозитория.

Назначение каталогов более или менее понятно из их имён (к этому вопросу мы ещё вернёмся), так что остановимся только на каталоге releases. В нём есть подкаталоги для полудюжины последних релизов — в том числе и куда более «глубоких», нежели поддерживаемые в головном репозитории. В каждом из них мы увидим единственный подкаталог Everything. А в нём — уже привычные «архитектурные» подкаталоги:

i386/
source/
x86_64/
Далее вглубь (или вверх? — зависит от используемой метафоры) — последний уровень вложенности — подкаталоги:

debug/
os/
В первом, как легко догадаться, — отладочная информация, которая нам сейчас не интересна. А вот во втором — уже собственно пакеты. В том числе и основной пакет описания репозитория — rpmfusion-free-release. Тот самый, установка которого однозначно приводит к подключению этой «репы». А в соответствующем подкаталоге каталога nonfree аналогичный пакет и будет именоваться соответственно — rpmfusion-nonfree-release.

### Структура репозитория RFRemix
Пользователям оригинальной Fedora в чистом виде перечисленных репозиториев достаточно. Однако для русскоязычных наших сограждан если не обязательным, то более чем желательным является знакомство с репозиторием russianfedora.

Он расположен в одноименном каталоге по следующему <a href="https://mirror.yandex.ru/fedora/russianfedora/" target="_blank">адресу</a> (насколько я знаю, пока единственному). И структура его следующая: на первом уровне вложенности идут подкаталоги

build/ с файлами описания репозиториев,
releases/ с образами установочных дисков и LiveCD, и
russianfedora/, содержащий собственно пакеты.
В данный момент нас интересует только последний подкаталог. Он включает три подкаталога:

fixes/, представляющий своего рода дельту между базовыми и дополнительными пакетами оригинальной Fedora, с одной стороны, и RFRemix — с другой;
free/, предназначенный для полностью свободных пакетов проекта Russian Fedora;
nonfree/, предназначенный для пакетов проекта Russian Fedora, распространение которых ограничено законами некоторых стран (но не нашей).
Подробнее о составе всех трёх категорий будет говориться в следующем разделе — пока же нас интересует только физическая структура соответствующих каталогов.

Она идентична: каждый из них включает подкаталоги el/ и fedora/ того же назначения, что и в RPM Fusion. В подкаталоге fedora/, в свою очередь, выделяются подкатлоги development/, releases/ и updates/, а в подкаталоге releases/ — каталоги для номеров главных (мажорных) релизов, в настоящий момент — с 10-го по 15-й.

В каталоге каждого релиза мы видим единственный подкаталог Everything/, включающий подкаталоги для обеих поддерживаемых архитектур — i386/ и x86_64/, и подкаталог source/ для пакетов с исходными текстами. Ну и наконец этажом ниже лежат подкаталоги debug/ и os/ понятного (то есть того же, что и в RPM Fusion) назначения.

### Дополнительные репозитории
Описанных выше репозиториев большинству пользователей хватит почти на все случаи жизни. Однако в ряде случаев возникает и необходимость в дополнительных пакетах, в официальные «репы» по тем или иным причинам не включённых — возможно, пока не включённых. Типичный на сегодняшний день пример — браузер Chromium: его не найти ни в RPM Fusion, ни в Russian Fedora.

И тут на помощь придёт в первую очередь репозиторий <a href="https://repos.fedorapeople.org/" target="_blank">Fedora People</a> — он предназначен именно для пакетов, собираемых независимыми майнтайнерами. По содержанию он не перекрывается с офоциальным и «полуофициальными» репозиториями, однако, насколько мне известно, его пакеты тестируются на совместимость с ними, и потому могут использоваться безбоязненно.

Структура репозитория Fedora People предельно проста: по указанному адресу вы увидите множество каталогов, имена которых повторяют названия содержащихся в них пакетов. Внутри любого из них будет серия подкаталогов для поддерживаемого диапазона релизов — разного в разных случаях. А подкаталог каждого релиза содержит три стандартных подкаталога — i386/, SRPMS/ и x86_64/, заключающих в себе файл описания репозитория и собственно файлы пакетов.

В ряде случаев интерес может представлять репозиторий ATrpms. Он содержит многочисленные пакеты мультимедийного содержания, специализированные сборки ядра, изобильные драйвера для видеокарт Nvidia (в том числе для старых моделей, которые уже не найти на официальном сайте фирмы). С полным списком пакетов можно ознакомиться здесь, а здесь — увидеть список поддерживаемых релизов.

Содержание ATrpms сильно пересекается с основными репозиториями — обычно это альтернативные сборки тех же пакетов. Так что гарантировать их полную совместимость с последними нельзя. Впрочем, различная степень надёжности пакетов из ATrpms по указанным адресам помечена наглядно — цветами, расшифрованными в легенде.

В статьях и обзорах, посвящённых Fedora, можно встретить упоминания о многих других дополнительных репозиториях для этого дистрибутива — их список можно видеть, например, в ссылках с того же ATrpms. Однако практически все они потеряли актуальность. Одни (Livna, Freshrpms, Dribble) ныне объединены в составе RPM Fusion. В других содержатся пакеты для весьма старых версий Fedora. Ну а репозиторий Tigro стал основой для Russian Fedora — хотя ленивым обладателям старых версий Fedora он будет полезен и сам по себе.

## Логическая организация репозиториев
Физическая структура репозиториев Fedora, особенно головного, выглядит довольно запутанной. К счастью, пользователю, как уже говорилось, практически не приходится иметь с ней дело. В 99 случаях их 100 ему достаточно ориентироваться в логической их организации, которую мы сейчас и рассмотрим.

### Классификация программ
Для начала следует сказать, почему слово репозитории ранее было употреблено во множественном числе. А для этого нужно рассмотреть классификацию пакетов, принятую в этом дистрибутиве. Она предельно проста и включает всего две категории.

Первая категория называется free и охватывает программы, распространяемые безоговорочно свободно — то есть под лицензией GPL и, по мнению FSF, стопроцентно с ней совместимыми.

Вторая категория называется nonfree — название не очень удачное, поскольку вызывает ассоциации со всякого рода варезом, контрафактом или необходимостью каких-либо платежей при их использовании. На самом деле это совершенно не так. В категории nonfree объединены исключительно бесплатные (в смысле free beer) и легально распространяемые программы. Однако на распространение их накладываются те или иные ограничения. И потому с точки зрения FSF они не могут называться истинно свободными (в смысле free word).

С одной стороны, в категорию nonfree попадают программы, распространяемые только в бинарном виде — без всяких ограничений, но и без исходных текстов. Примерами таких программ являются фирменные драйвера устройств, например видеокарт и сетевых устройств, или проигрыватель флэш-роликов от фирмы Adobe, браузер Opera, некоторые шрифты и игры.

С другой стороны, под понятие nonfree попадают программы, доступные в исходных текстах и, казалось бы, полностью свободные. Однако их распространение в некоторых государствах ограничивается юридическими причинами. Типичным чему примером являются мультимедийные кодеки, основанные на алгоритмах, которые были запатентованы в одной стране, признающей патенты на алгоритмы. В большинстве же более иных стран, до такого не додумавшихся, распространение их абсолютно легально.

Так вот, категории free и nonfree логически представляют собой самостоятельные репозитории — и это первая причина, почему этот термин обычно фигурирует во множественном числе. А о других причинах мы узнаем на следующей странице.

###  Основные репозитории
Для начала рассмотрим основные репозитории, которые автоматически подключаются при установке RFRemix.

Главный, официально поддерживаемый, репозиторий проекта Fedora содержит только пакеты категории free. И поэтому называется просто и незатейливо — fedora, с расшифровкой в виде номера версии и целевой архитектуры, например: Fedora 15 — x86_64.

А вот в составе RPMFusion имеются как полностью свободные, так и «несвободные» пакеты. А потому в нём обособляются два репозитория — rpmfusion-free и rpmfusion-nonfree.

Внутреннее устройство Russian Fedora ещё «богаче» — в нём имеется целых три репозитория:

* russianfedora-fixes — это пакеты, которые имеются в репозиториях fedora или rpmfusion, однако представленные версиями либо более новыми, либо адаптированными к нашим условиям и кириллическому окружению; пакеты этого репозитория не разделяются на свободные и несвободные;
* russianfedora-free — полностью свободные пакеты, отсутствующие в репозиториях fedora или rpmfusion;
* russianfedora-nonfree — «не совсем свободные», в указанном на прошлой странице смысле, пакеты, также отсутствующие в репозиториях оригинальной Fedora.

Это основная ветка репозиториев для каждого релиза. Она сопровождается несколькими дополнительными, которые заполняются пакетами, обновляемыми в промежутке между релизами:

* updates — для собственно Fedora;
* rpmfusion-free-updates — для Rpmfusion-free;
* rpmfusion-nonfree-updates — для rpmfusion-nonfree;
* russianfedora-fixes-updates — для Russian Fedora Fixes;
* russianfedora-free-updates — для Russian Fedora Free;
* russianfedora-nonfree-updates — для Russian Fedora Nonfree.

Кроме того, каждому из основных репозиториев соответствуют специальные ветки отлаживаемых и тестируемых пакетов: fedora-debuginfo и fedora-updates-testing, соответственно — для основного репозитория и образованные по образу и подобию — для всех остальных.

И, наконец, существует ветка репозиториев rawhide. Она содержит пакеты следующей, разрабатываемой в настоящий момент, версии дистрибутива и, естественно, включает в себя те же самые репозитории, что и в ветках стабиольных релизов: fedora-rawhide, rpmfusion-free-rawhide, rpmfusion-nonfree-rawhide и так далее.

Сказанное выше относилось к репозиториям бинарных пакетов для архитектур i386 и x86_64. Однако есть ещё и репозитории исходных текстов — fedora-source, rpmfusion-free-source и так далее.